package rs.networx.servlets;

import java.io.IOException;
import java.util.Date;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import rs.networx.dao.PersonDao;
import rs.networx.entity.Person;
import rs.networx.util.ErrorMessages;

public class LoginServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@EJB
	private PersonDao personDao;

	private String username;
	private String password;

	private Person loggedUser;
	private Person personToLogin;
	
	private String cleanedUpDateOfBirth;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		System.out.println("LOAD: LoginServlet");

		response.setContentType("text/html; charset=UTF-8");
		request.setCharacterEncoding(response.getCharacterEncoding());

		username = request.getParameter("LoginUsername");
		password = request.getParameter("LoginPassword");

		System.out.println(username + "  " + password);

		HttpSession session = request.getSession(true);
		loggedUser = (Person) session.getAttribute("logovaniUser");
		// System.out.println(loggedUser);

		if (loggedUser == null) {
			// znaci da nema ulogovanog korisnika, pa mozemo da logujemo...
			if (!username.equals("") && !password.equals("")) {
				personToLogin = personDao.login(username, password);
				// personsName = personDao.getName(userName);
				if (personToLogin == null) {
					// znaci da nije nasao datog usera u bazi, sto znaci da ili
					// username ili password nije dobar...
					session.setAttribute("loginStatus",
							ErrorMessages.LOGIN_FAILED);

					request.getRequestDispatcher("WelcomePage.jsp").forward(
							request, response);
					return;
				} else if (personToLogin != null) {
					// znaci da je login uspsno prosao, tj. dati korisnik
					// postoji u bazi...
					if (personToLogin.getActivated() == true) {
						// i ako je korisnik aktiviran, onda mozemo da ga
						// logujemo...
						personToLogin.setLoggedIn(true);
						session.setAttribute("logovaniUser", personToLogin);
						System.out.println(personToLogin);
						// Person loggedUser1 = (Person)
						// request.getAttribute("logovaniUser");
						// System.out.println(loggedUser1);
						
						cleanedUpDateOfBirth = cleanUpDateOfBirth(personToLogin.getDob());
						System.out.println(cleanedUpDateOfBirth);
						
						session.setAttribute("cleanedUpDateOfBirth", cleanedUpDateOfBirth);

						request.getRequestDispatcher(
								"RegistredUserHomeServlet").forward(request,
								response);
						return;
					} else if (personToLogin.getActivated() == false) {
						// znaci da profil jos uvek nije aktiviran, pa
						// ispisujemo poruku o tome na login stranici...
						session.setAttribute("loginStatus",
								ErrorMessages.PROFILE_NOT_ACTIVE);

						request.getRequestDispatcher("WelcomePage.jsp")
								.forward(request, response);
						return;
					}
				}
			}
		} else if (loggedUser != null) {
			// znaci da vec imamo korisnika na sesiji...
			// i ako je dati korisnik sa sesije logovan...
			if (loggedUser.getLoggedIn() == true) {
				// i ako su objekat sa sesije i person koji hoce da se loguje
				// isti...
				if (loggedUser.getEmail().equals(personToLogin.getEmail())) {
					// tada logujemo person koji hoce da se loguje...
					personToLogin.setLoggedIn(true);
					session.setAttribute("logovaniUser", personToLogin);
					
					cleanedUpDateOfBirth = cleanUpDateOfBirth(personToLogin.getDob());
					System.out.println(cleanedUpDateOfBirth);
					
					session.setAttribute("cleanedUpDateOfBirth", cleanedUpDateOfBirth);

					request.getRequestDispatcher("RegistredUserHomeServlet")
							.forward(request, response);
					return;
				} else if (!(loggedUser.getEmail().equals(personToLogin
						.getEmail()))) {
					// i ako su objekat sa sesije i person koji hoce da se
					// loguje nisu isti...
					// tada logujemo person koji hoce da se loguje...
					personToLogin.setLoggedIn(true);
					session.setAttribute("logovaniUser", personToLogin);
					
					cleanedUpDateOfBirth = cleanUpDateOfBirth(personToLogin.getDob());
					System.out.println(cleanedUpDateOfBirth);
					
					session.setAttribute("cleanedUpDateOfBirth", cleanedUpDateOfBirth);

					// odlogujemo onog sa sesije...
					loggedUser.setLoggedIn(false);

					request.getRequestDispatcher("RegistredUserHomeServlet")
							.forward(request, response);
					return;
				}
			} else if (loggedUser.getLoggedIn() == false) {
				// ako dati korisnik sa sesije nije logovan...
				// i ako su objekat sa sesije i person koji hoce da se loguje
				// isti...
				if (loggedUser.getEmail().equals(personToLogin.getEmail())) {
					// tada logujemo person koji hoce da se loguje...
					personToLogin.setLoggedIn(true);
					session.setAttribute("logovaniUser", personToLogin);
					
					cleanedUpDateOfBirth = cleanUpDateOfBirth(personToLogin.getDob());
					System.out.println(cleanedUpDateOfBirth);
					
					session.setAttribute("cleanedUpDateOfBirth", cleanedUpDateOfBirth);

					request.getRequestDispatcher("RegistredUserHomeServlet")
							.forward(request, response);
					return;
				} else if (!(loggedUser.getEmail().equals(personToLogin
						.getEmail()))) {
					// i ako su objekat sa sesije i person koji hoce da se
					// loguje nisu isti...
					// tada logujemo person koji hoce da se loguje...
					personToLogin.setLoggedIn(true);
					session.setAttribute("logovaniUser", personToLogin);

					request.getRequestDispatcher("RegistredUserHomeServlet")
							.forward(request, response);
					return;
				}
			}
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		doGet(request, response);
	}
	
	private String cleanUpDateOfBirth(Date dateOfBirth){
		String result = null;
		
		if(personToLogin != null){
			System.out.println(dateOfBirth);
			
			String dateOfBirthDB = dateOfBirth.toString();
			
			int i = dateOfBirthDB.indexOf(" ");
			System.out.println("i: " + i);
			
			String temp = dateOfBirthDB.substring(0, i);
			System.out.println("ddd: " + temp);
			
			String[] array = temp.split("-");
			
			System.out.println(array[0]);
			System.out.println(array[1]);
			System.out.println(array[2]);
			System.out.println(array[2] + "/" + array[1] + "/" + array[0]);
			
			result = array[2] + "/" + array[1] + "/" + array[0];
		}
		return result;
	}

}
